home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / wgsave11.zip / SCRNSAVE.PAS < prev    next >
Pascal/Delphi Source File  |  1993-07-13  |  5KB  |  176 lines

  1. {
  2.   Hacked on 30 june 1993 by Wolfgang Gross
  3.   Email: Gross@aecds.exchi.uni-heidelberg.de
  4.  
  5.   Modified on 8 july 1993 by Rutger van de GeVEL
  6.   Email: Rutger@kub.nl
  7.  
  8.   Compiler:
  9.   - Turbo/Borland Pascal, Version >= 6.0
  10.  
  11.   - Turbo Vision, Version >= 1.0
  12.  
  13.   Warning: You may need to change the cmStart/StopScreenSaver constants.
  14.            Randomize might interfere with other parts of your program.
  15.            Take care of checking ScreenSaverMode in your Idle routine
  16.            (see test program TESTSCRN.PAS).
  17. }
  18.  
  19. Unit ScrnSave;
  20.  
  21. Interface
  22.  
  23. Uses
  24.    Objects, Drivers, App;
  25.  
  26. Const
  27.    cmStartScreenSaver    = 65534;
  28.    cmStopScreenSaver     = 65535;
  29.  
  30.    GracePeriod:  LongInt = 5000;           { ask Dos time after graceperiod }
  31.  
  32. Type
  33.    PScreenSaverApp = ^TScreenSaverApp;
  34.    TScreenSaverApp = Object (TApplication)
  35.                      KickTime       : LongInt; { in Sec100 }
  36.                      LastTime       : LongInt; { in Sec100 }
  37.                      SleepTime      : LongInt; { in Sec100 }
  38.                      FlashDelay     : LongInt; { in Sec100 }
  39.                      ScreenSaverMode: Boolean;
  40.                      GraceCounter   : LongInt;
  41.                      Constructor Init;
  42.                      Procedure Idle; Virtual;
  43.                      Procedure GetEvent (Var Event: TEvent); Virtual;
  44.                      Procedure HandleEvent (Var Event: TEvent); Virtual;
  45.                      Procedure ScreenSaver; Virtual;
  46.                      End;
  47.  
  48.  
  49. Function Time: LongInt;
  50.  
  51.  
  52. Implementation
  53.  
  54. Uses
  55.    Dos, Crt;
  56.  
  57.  
  58. Function Time: LongInt;
  59. Var
  60.    Hour, Minute, Second, Sec100: Word;
  61.  
  62.    Begin (* Time *)
  63.    GetTime (Hour, Minute, Second, Sec100);
  64.    Time:= LongInt (Sec100) + 100 *                                    { ! }
  65.           (LongInt (Second) + 60 * LongInt (Minute + 60 * Hour));     { ! }
  66.    End;  (* Time *)
  67.  
  68.  
  69. Constructor TScreenSaverApp.Init;
  70. Var
  71.    R: TRect;
  72.  
  73.    Begin (* TScreenSaverApp.Init *)
  74.    Inherited Init;
  75.    Randomize;                                                         { ! }
  76.    KickTime:= 0;
  77.    LastTime:= 0;
  78.    SleepTime:= 0;                     { ScreenSaver is disabled by default }
  79.    FlashDelay:= 500;
  80.    ScreenSaverMode:= False;
  81.    GraceCounter:= 0;
  82.    End;  (* TScreenSaverApp.Init *)
  83.  
  84.  
  85. Procedure TScreenSaverApp.Idle;
  86.  
  87.    Begin (* TScreenSaverApp.Idle *)
  88.    Inherited Idle;
  89.    If ScreenSaverMode Then
  90.       Begin
  91.       If (Abs (Time - LastTime) > FlashDelay) Then                    { ! }
  92.          Begin
  93.          ClrScr;
  94.          ScreenSaver;
  95.          End;
  96.       End;
  97.    End;  (* TScreenSaverApp.Idle *)
  98.  
  99.  
  100. Procedure TScreenSaverApp.GetEvent (Var Event: TEvent);
  101. Var
  102.    SEvent: TEvent;
  103.  
  104.    Begin (* TScreenSaverApp.GetEvent *)
  105.    Inherited GetEvent (Event);
  106.    {
  107.    We must call HandleEvent explicitly since a pending modal dialog
  108.    will otherwise eat the cmStartScreenSaver/cmStopScreenSaver event.
  109.    Reset counter if event pending but do not kill this event
  110.    }
  111.    If (Event.What <> evNothing) Then
  112.       Begin
  113.       GraceCounter:= 0;
  114.       KickTime:= 0;
  115.       If (ScreenSaverMode) Then
  116.          Begin
  117.          SEvent.What:= evCommand;
  118.          SEvent.Command:= cmStopScreenSaver;
  119.          HandleEvent (SEvent);
  120.          Exit;
  121.          End;
  122.       End;
  123.    If (Not ScreenSaverMode) Then
  124.       If (GraceCounter < GracePeriod) Then
  125.          Inc (GraceCounter)
  126.       Else
  127.          Begin
  128.          If (KickTime = 0) Then
  129.             KickTime:= Time;
  130.          If (SleepTime > 0) Then                                      { ! }
  131.             If (Abs (Time - KickTime) > SleepTime) Then               { ! }
  132.                Begin
  133.                SEvent.What:= evCommand;
  134.                SEvent.Command:= cmStartScreenSaver;
  135.                HandleEvent (SEvent);
  136.                Exit;
  137.                End;
  138.          End;
  139.    End;  (* TScreenSaverApp.GetEvent *)
  140.  
  141.  
  142. Procedure TScreenSaverApp.HandleEvent (Var Event: TEvent);
  143.  
  144.    Begin (* TScreenSaverApp.HandleEvent *)
  145.    Inherited HandleEvent (Event);
  146.    If (Event.What = evCommand) Then
  147.       Case Event.Command Of
  148.            cmStartScreenSaver: Begin
  149.                                LastTime:= 0;
  150.                                ScreenSaverMode:= True;
  151.                                End;
  152.            cmStopScreenSaver : Begin
  153.                                ScreenSaverMode:= False;
  154.                                KickTime:= 0;
  155.                                GraceCounter:= 0;
  156.                                ReDraw;
  157.                                End;
  158.         Else
  159.            Exit;
  160.         End;
  161.    ClearEvent (Event);
  162.    End;  (* TScreenSaverApp.HandleEvent *)
  163.  
  164.  
  165. Procedure TScreenSaverApp.ScreenSaver;
  166.  
  167.    Begin (* TScreenSaverApp.ScreenSaver *)
  168.    Abstract;                                                          { ! }
  169.    {
  170.      Forces to override this virtual method
  171.    }
  172.    End;  (* TScreenSaverApp.ScreenSaver *)
  173.  
  174.  
  175. End. (* Implementation *)
  176.